<?php

declare(strict_types=1);

namespace app\admin\validate\dev;

use think\facade\Log;
use think\Validate;

class Field extends Validate
{
    /**
     * 定义验证规则
     * 格式：'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'config' => 'checkSetLength'
    ];


    /**
     * 定义错误信息
     * 格式：'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
        'config.checkSetLength' => '配置的字段类型不允许设置长度',
    ];


    protected $scene = [
        'index' => ['*'],
        'add' => ['config'],
        'update' => ['config'],
    ];


    /**
     * 检查json字段中的配置错误
     * 1. 不能设置长度的类型，错误的提供了长度的值
     * @param $value
     * @return bool
     */
    protected function checkSetLength($value, $rule, $data): bool
    {
        $json_data = is_string($value) ? json_decode($value, true) : $value;
        $type_list = ['text', 'longtext', 'datetime', 'json'];
        if (in_array($json_data['field_type'], $type_list) && $json_data['field_length']) {
            return false;
        }
        return true;
    }
}
